具有自定义分隔符和新列名的列表变量的一次性编码
One-hot encoding for list variable with customized delimiter and new column names
我的数据:
Rank Platforms Technology
high Windows||Linux Unity
high Linux
low Windows Unreal
low Linux||MacOs GameMakerStudio||Unity||Unreal
low GameMakerStudio
low
我想把它转换成这样:
Rank platform_Windows platform_linux platform_MacOs technology_unity technology_unreal technology_GameMakerStudio
high 1 0 0 1 0 1
high 0 1 0 0 0 0
low 1 0 0 0 1 0
low 0 1 1 1 1 1
low 0 0 0 0 0 1
low 0 0 0 0 0 0
所以这是一种一次性编码。我关注了很多答案:
问题是:
- none 展示了如何用
||
分隔符 分隔我的列表
其中 - none 展示了如何为新列名添加前缀。例如
platform_
和 technology_
。我需要这个来知道新列来自哪个原始列。
我当前的代码是:
df.drop('Platforms', 1).join(
pd.get_dummies(
pd.DataFrame(df.Platforms.str.split("||").tolist()).stack(),
prefix=['platform']
).assum(level=0)
)
df.drop('Technology', 1).join(
pd.get_dummies(
pd.DataFrame(df.Technology.str.split("||").tolist()).stack(),
prefix=['technology']
).assum(level=0)
)
但我得到的错误是:
TypeError: object of type 'float' has no len()
我已阅读文档pandas.get_dummies and pandas.Series.str.get_dummies。后者似乎接受自定义分隔符,而前者允许自定义新列前缀...
你可以这样做:
s = [df[col].str.get_dummies().add_prefix(f'{col.lower()}_')
for col in ['Platforms', 'Technology']]
pd.concat([df[['Rank']]] + s, axis=1)
我的数据:
Rank Platforms Technology
high Windows||Linux Unity
high Linux
low Windows Unreal
low Linux||MacOs GameMakerStudio||Unity||Unreal
low GameMakerStudio
low
我想把它转换成这样:
Rank platform_Windows platform_linux platform_MacOs technology_unity technology_unreal technology_GameMakerStudio
high 1 0 0 1 0 1
high 0 1 0 0 0 0
low 1 0 0 0 1 0
low 0 1 1 1 1 1
low 0 0 0 0 0 1
low 0 0 0 0 0 0
所以这是一种一次性编码。我关注了很多答案:
问题是:
- none 展示了如何用
||
分隔符 分隔我的列表
其中 - none 展示了如何为新列名添加前缀。例如
platform_
和technology_
。我需要这个来知道新列来自哪个原始列。
我当前的代码是:
df.drop('Platforms', 1).join(
pd.get_dummies(
pd.DataFrame(df.Platforms.str.split("||").tolist()).stack(),
prefix=['platform']
).assum(level=0)
)
df.drop('Technology', 1).join(
pd.get_dummies(
pd.DataFrame(df.Technology.str.split("||").tolist()).stack(),
prefix=['technology']
).assum(level=0)
)
但我得到的错误是:
TypeError: object of type 'float' has no len()
我已阅读文档pandas.get_dummies and pandas.Series.str.get_dummies。后者似乎接受自定义分隔符,而前者允许自定义新列前缀...
你可以这样做:
s = [df[col].str.get_dummies().add_prefix(f'{col.lower()}_')
for col in ['Platforms', 'Technology']]
pd.concat([df[['Rank']]] + s, axis=1)